Industrial equipment and machines are often operated automatically or semi-automatically using a computer-implemented control system that monitors the system under control and/or its environment based on sensor readings and affects the system's behavior via actuators. For example, the fuel supply to a furnace may be controlled by regulating valve settings based on temperature measurements. The control logic or algorithm that produces the control outputs, such as commands to the actuators, from the control inputs, such as the sensor readings, is conventionally designed by a control engineer with knowledge of the particular system to be controlled, and then encoded by a software engineer in any of a variety of programming languages (e.g., C, BASIC, or ladder logic). The control software may be executed by a programmable logic controller (PLC) or microcontroller, which may be integrated into the system under control as an embedded device. Following execution, data captured about the state of the system under control at various sample times may be analyzed in conjunction with the control logic to assess the performance of the control system and, if warranted, improve it.
To be robust to sensor and actuator faults and failures or other damage of the machine(s) under control, the control software is usually designed to include alternative control logic to be executed in case of such events, to the extent they are predictable; as a result, control software for large systems can become highly complex. In the event of unexpected machine damage or environmental conditions, the control logic is re-designed to handle the new conditions. In such instances, or when the control logic is to be changed for any other reason, the system under control is generally shut down to allow new control software implementing the changes to be deployed. This process can be costly and time-consuming. Further, changes to the control logic being executed are sometimes insufficiently tracked, resulting in discrepancies, during subsequent analysis, between the control logic presumed to have been executed and the control logic actually implemented.